/**
 * 项目名称:
 *
 * @Author: 夏国倩
 * @Date: 2023/10/14 11:33
 * @Copyright
 */
package Reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ResourceBundle;
/*
java.lang.reflect.Field;类的属性
 */
public class ReflectTest5 {
    public static void main(String[] args) throws Exception{
        Object ob;
        ResourceBundle bundle=ResourceBundle.getBundle("demo/Reflect/classinfo");
        String className=bundle.getString("className3");
        System.out.println(className);
        //获取整个类
        Class c = Class.forName(className);
        String cName=c.getName();
        System.out.println("完整类名："+cName);

        String simpleName=c.getSimpleName();
        System.out.println("简单类名："+simpleName);

        //获取属性Field
        //获取所有public修饰的属性
        /*Field[] fs=c.getFields();
        System.out.println(fs.length);
        System.out.println(fs[0].getName());*/
        //获取其中一个成员变量---根据名称获取某个成员变量
        Field age=c.getDeclaredField("age");
        //输出 名字---类型
        System.out.println(age.getName()+"---"+age.getType());
        //获取所有的属性
        Field[] fs=c.getDeclaredFields();
        for (Field f:fs){
            //获取属性的修饰符列表
            int i=f.getModifiers(); //返回的修饰符是一个数字，每个数字都是修饰符的代号
            System.out.println("修饰符代号："+i);
            //可以将这个“代号”数字转换成“字符串”
            String modifierString = Modifier.toString(i);
            System.out.println(modifierString);
            Class fType = f.getType(); //类型
            System.out.println("属性类型的简单名字："+fType.getSimpleName());
            System.out.println(f.getName()+"--"+f.getType()); //名字--类型
        }
        //赋值
        age.setAccessible(true);//暴力开权限 -->private成员变量不能直接操作
        People p=new People();
        age.set(p,80);
        System.out.println("赋值age:"+p.getAge());

        //取值
        int o=(int)age.get(p);
        System.out.println("取值age:"+o);
    }
}
